/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package view;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import javax.swing.*;

/**
 * Classe representant la fenetre de connection
 * @author Lefevre, Thoue
 */
public class ConnectFrame extends JDialog{
    private PanelPrincipal panelPrincipal;
    private JTextField fieldNom;
    private JTextField fieldPrenom;
    private JTextField fieldPort;
    private JComboBox ipList;
    private JButton connect;
    private Fenetre fenetre;
    /**
     * Constructeur
     * @param fenetre lien vers la fenetre principal
     */
    public ConnectFrame(final Fenetre fenetre) {
        this.fenetre = fenetre;
        initComposants();        
        connect.addActionListener(new ConnectListenner(fenetre,this));
    }
    /**
     * Methode d'initialisation des composants graphiques
     */
    private void initComposants(){
        setVisible(true);
        setPreferredSize(new Dimension(260,240));
        setTitle("Connection eAudioChat");
        setLayout(new BorderLayout());
        setResizable(false);
        setLocationRelativeTo(null);
        pack();
        
        
        
        panelPrincipal = new PanelPrincipal();
        fieldNom = new JTextField(20);
        fieldPrenom = new JTextField(20);
        fieldPort = new JTextField(6);
        fieldPort.setText("2012");
        connect = new JButton("Connect");

        
        add(panelPrincipal,BorderLayout.CENTER);
        panelPrincipal.add(new JLabel("Nom"));
        panelPrincipal.add(fieldNom);
        panelPrincipal.add(new JLabel("Prénom"));
        panelPrincipal.add(fieldPrenom);
        panelPrincipal.add(new JLabel("Adresse IP d'écoute"));
        ipList = new JComboBox(getIps().toArray());
        panelPrincipal.add(ipList);
        panelPrincipal.add(new JLabel("Port d'écoute"));
        panelPrincipal.add(fieldPort);
        
        add(connect,BorderLayout.SOUTH);
        validate();
    }
    /**
     * Getter du champs de texte Nom
     * @return fieldNom
     */
    public JTextField getFieldNom() {
        return fieldNom;
    }
    /**
     * Getter du champs de texte Port
     * @return fieldPort
     */
    public JTextField getFieldPort() {
        return fieldPort;
    }
    /**
     * Getter du champs de texte Prenom
     * @return fieldPrenom
     */
    public JTextField getFieldPrenom() {
        return fieldPrenom;
    }
    /**
     * Getter de la liste des ips
     * @return ipList
     */
    public JComboBox getIpList() {
        return ipList;
    }
    
    /**
     * Recupere la liste des adresse ips v4 disponible de la carte reseau
     * @return la liste des adresses ip
     */
    private List<String> getIps() {
        List<String> ips = new ArrayList<String>();


            Enumeration<NetworkInterface> interfaces=null;
        try {
            interfaces = NetworkInterface.getNetworkInterfaces();
        } catch (SocketException ex) {
            Logger.getLogger(ConnectFrame.class.getName()).log(Level.SEVERE, null, ex);
        }

            while (interfaces.hasMoreElements()) {  // carte reseau trouvee
                NetworkInterface interfaceN = (NetworkInterface) interfaces.nextElement();
                Enumeration<InetAddress> ienum = interfaceN.getInetAddresses();
                
                while (ienum.hasMoreElements()) {  // retourne l adresse IPv4
                    String ip = ienum.nextElement().getHostAddress().toString();
                    if(Pattern.matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}", ip)){
                        ips.add(ip);
                    }
                }
            }
        return ips;
    }
}
